#include "headers.h"
#include "ModuleManager.h"


namespace Engine
	{
	ModuleManager::ModuleManager(void)
		{
		registerStandartModules();
		}
	
	ModuleManager::~ModuleManager(void)
		{
		releaseModules();
		}

	void ModuleManager::registerStandartModules()
		{
		modules.insert(Item(WINDOW, new Window()));
		}

	bool ModuleManager::registerModule(int id, Module *module)
		{
		if(hasModule(id))
			return false;
		modules.insert(Item(id, module));
		return true;
		}

	bool ModuleManager::releaseModule(int id)
		{
		if(!hasModule(id))
			return false;
		delete modules[id];
		return true;
		}

	void ModuleManager::releaseModules()
		{
		for(Modules::iterator it=modules.begin(); it!=modules.end(); ++it)
			releaseModule(it->first);
		}

	bool ModuleManager::hasModule(int id)
		{
		if(modules.find(id) == modules.end())
			return false;
		return true;
		}

	Module* ModuleManager::getModule(int id)
		{
		if(hasModule(id))
			return modules[id];
		return nullptr;
		}

	void ModuleManager::print()
		{
		cout << "| id \t| name \t\t| pointer \t|\n";
		for(Modules::iterator it=modules.begin(); it!=modules.end(); ++it)
			cout << "| " << it->first << "\t| " << it->second->getName() << "\t| " << (long int)it->second << "\t|\n";
		}
	}
